<?php
defined( '_JEXEC' ) or die( 'Restricted access' );


/**
 * menuHelper Class for linio Component
 *
 * @package    joomla.administrator.components.linio.models
 * @subpackage helpers
 * @author MAVLSoft - joomla! Component Creator 1.0
 * @version 1.0
 * @link http://www.mavlsoft.com/joomlacreator
 * @license GNU General Public License version 3 or later; see http://www.gnu.org/copyleft/gpl.html
 */
class menuHelper{

	private $separator;
	
	function __construct($separator = " / "){		
		$this->separator = $separator;
	}
	
	/**
	 * 
	 * Identificador del menu
	 * @var int
	 */
	public $id;
	
	/**
	 * 
	 * Identificador del padre
	 * @var int
	 */
	public $parentid;
	
	/**
	 * 
	 * Descripcion del elemento menu
	 * @var string
	 */
	public $description;  //VARCHAR(150),
	

	/**
	 * 
	 * Categoria del menu
	 * @var string
	 */
	public $category = '';  //VARCHAR(255),
	
	
	/**
	 * 
	 * arreglo de menus hijos
	 * @var array de elementos "menuHelper"
	 */
	public $alHijos = array();
	
	
	/**
	 * Obtener un hijo de este menu por medio de la descripcion
	 * @param description
	 * @return
	 */
	function getItem($description){
		foreach ($this->alHijos as $menu) {
			if($menu->description == $description) {
				return $menu;				
			}			
		}
		return null;
	}	
	
	/**
	 * 
	 * Obtener un hijo de este menu por medio del id
	 * @param $id
	 */
	function getItemId($id){
		foreach ($this->alHijos as $menu) {
			if($menu->id == $id) {
				return menu;				
			}			
		}
		return null;
	}		
	
	/**
	 * 
	 * Agregar un objeto Menu al arreglo
	 * @param $item objeto de tipo menuHelper
	 */
	function addItem($item){
		$item->parentid = $this->id;
		if($item->parentid == 0){
			$item->category = trim($item->description);			
		} else {
			$item->category = trim($this->category.$this->separator.$item->description);
		}		
		$this->alHijos[] = $item;
	}	
	
	/**
	 * 
	 * Recuperar la lista de hijos y nietos.
	 */
	function  getChildsAsArrayList(){
		$item = new menuHelper();
		$retval = array();		
		$item->id = $this->id;
		$item->parentid = $this->parentid;
		$item->description = $this->description;
		$item->category = $this->category;
		$retval[] = $item;		
		foreach ($this->alHijos as $menu) {
			$retval = array_merge($retval,$menu->getChildsAsArrayList());
		}
		return $retval;
	}	
	
	/**
	 * Crea una sentencia SQL para insertar registros con o sin la clausula "INSERT"
	 * @param insertClause
	 * @return
	 */
	function toSQLInsert($insertClause = true,$recursive=false) {
		$sb= "";
		if($insertClause){
			$sb = "INSERT INTO #__liniomenu VALUES";
		}
		$sb.= "(";
		$sb.= $this->id;
		$sb.= ",";
		$sb.= $this->parentid;
		$sb.= ",";
		$sb.= $this->noNull($this->category);
		$sb.= ",";
		$sb.= $this->noNull($this->description);		
		$sb.= ")";
		if($insertClause){
			$sb.= ";";
		} else {
			$sb.= ",";
		}
		$sb.= PHP_EOL;
		if($recursive){
			foreach ($this->alHijos as $menu) {
				$sb.= $menu->toSQLInsert($insertClause);
			}		
		}
		return $sb;
	}	
	
	/**
	 * 
	 * preparar un valor de tipo String para SQL 
	 * @param $value
	 */
	function noNull($value){	
		return ($value==null ? 'NULL':"'".trim(str_replace("'", "''",$value)."'")); //la doble comilla "''" es un "ESCAPE" para SQL
	}
	
	/**
	 * 
	 * metodo para mostar los datos de la clase
	 */
//	function toString() {
//		return vsprintf(sprintf("Menu [id=%s, parentid=%s, description=%s,", $this->id, $this->parentid, $this->description)."\nalHijos=%s]", $this->alHijos);
//	}	
} 

?>